#include <cstdio>
#include <algorithm>
using namespace std;
long long x,k;
const int MOD=1e9+7;
long long pow_mod(long long a,long long n){
    long long ans=1;
    while(n){
        if(n%2){
            ans=(ans*a)%MOD;
        }
        n/=2;
        a=(a*a)%MOD;
    }
    return ans%MOD;
}
int main(void){
    scanf("%lld%lld",&x,&k);
    //0的特判
    if(x==0){
        printf("0\n");
    }
    else{
        //这里得到的结果都是取模之后的  所以2^(k+1) 有可能小于2^k
        //这里x也要先模一下
        long long ans1=(pow_mod(2,k+1)*(x%MOD))%MOD;
        long long ans2=pow_mod(2,k);
        printf("%lld\n",((ans1-ans2+MOD)%MOD+1)%MOD);
    }
    return 0;
}